from typing import Annotated
from fastapi import APIRouter, Depends, status
from app.api.deps import CurrentUser, SessionDep
from app import services
from app import models

router = APIRouter()


@router.post("/match-predict/historical-europe-18wan", response_model=models.MatchPredictEurope18wanResultResponse)
async def get_historical_europe_18wan(
    session: SessionDep, 
    current_user: CurrentUser, 
    req: models.MatchPredictEurope18wanCondition
):
    """
    获取历史欧洲18万数据
    根据条件查询 t_match_europe_18wan 表中符合条件的历史记录
    支持按赛事名称、球队名称、时间范围、赔率范围、比分范围等多维度条件筛选
    支持区间查询功能
    """
    return await services.HistoricalEurope18wanService(current_user=current_user, db=session).get_historical_europe_18wan(req)


@router.post("/match-predict/update-matches-europe-18w-min-max", response_model=models.MatchesEurope18wMinMaxResponse)
async def update_matches_europe_18w_min_max(
    session: SessionDep, 
    current_user: CurrentUser, 
    req: models.MatchesEurope18wMinMaxUpdateRequest
):
    """
    更新欧洲18万数据最小最大值表
    实现不存在则插入，存在则更新的功能
    主键是fid
    """
    return await services.MatchesEurope18wMinMaxService(current_user=current_user, db=session).update_matches_europe_18w_min_max(req)


@router.delete("/match-predict/delete-matches-europe-18w-min-max/{fid}", response_model=models.MatchesEurope18wMinMaxResponse)
async def delete_matches_europe_18w_min_max(
    fid: int,
    session: SessionDep, 
    current_user: CurrentUser
):
    """
    根据fid删除欧洲18万数据最小最大值表记录
    """
    return await services.MatchesEurope18wMinMaxService(current_user=current_user, db=session).delete_matches_europe_18w_min_max(fid)


@router.get("/match-predict/get-matches-europe-18w-min-max/{fid}", response_model=models.MatchesEurope18wMinMaxResponse)
async def get_matches_europe_18w_min_max(
    fid: int,
    session: SessionDep, 
    current_user: CurrentUser
):
    """
    根据fid获得欧洲18万数据最小最大值表记录
    """
    return await services.MatchesEurope18wMinMaxService(current_user=current_user, db=session).get_matches_europe_18w_min_max(fid)


@router.post("/match-predict/historical-europe-293-18wan", response_model=models.MatchPredictEurope29318wanResultResponse)
async def get_historical_europe_293_18wan(
    session: SessionDep, 
    current_user: CurrentUser, 
    req: models.MatchPredictEurope29318wanCondition
):
    """
    获取历史欧洲293-18万数据
    根据条件查询 t_293_18w 表中符合条件的历史记录
    支持按赛事名称、球队名称、比分范围、赔率范围等多维度条件筛选
    支持区间查询功能
    """
    return await services.HistoricalEurope29318wanService(current_user=current_user, db=session).get_historical_europe_293_18wan(req)


@router.post("/match-predict/same-europe-293-analysis", response_model=models.V293InitSameEuropeFinalResultResponse)
async def get_same_europe_293_analysis(
    session: SessionDep, 
    current_user: CurrentUser, 
    req: models.V293InitSameEuropeFinalCondition
):
    """
    获取欧洲293分析数据
    根据条件查询 v_293_init_same_europe_final 表中符合条件的数据
    支持精确查询字段: event_name, fid
    支持范围查询字段: home_diff, draw_diff, away_diff
    支持区间查询功能
    """
    return await services.V293InitSameEuropeFinalService(current_user=current_user, db=session).get_same_europe_293_analysis(req)


@router.post("/match-predict/europe-18wan-return-test-statistics", response_model=models.MatchPredictEurope18wReturnTestStatisticsResponse)
async def get_match_predict_europe_18w_return_test_statistics(
    session: SessionDep,
    current_user: CurrentUser,
    req: models.MatchPredictEurope18wReturnTestStatisticsCondition
):
    """
    获取欧洲18万返回测试统计数据
    根据特定赔率范围和差值范围查询比赛统计数据
    统计内容包括：总比赛场次、主胜场次、平局场次、客胜场次、主胜率、平局率、客胜率
    """
    return await services.MatchPredictEurope18wReturnTestStatisticsService(current_user=current_user, db=session).get_match_predict_europe_18w_return_test_statistics(req)
